package org.jeecg.common.wx;

import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.bean.WxMaTemplateData;
import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;
import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import net.sf.json.JSONObject;
import org.jeecg.common.api.vo.Result;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @CLASSNAME WxUserInfo
 * @DESCRIPTION 获取微信用户信息
 * @AUTHOR chen
 * @DATE 2019-04-17 14:49
 **/
@Slf4j
public class WxUserInfo {

    private static Gson gson = new GsonBuilder().create();
    private final static String AppId = "wx5611d58abca7a6ce";//小程序appid
    private final static String AppSecret = "1f6153a0be5ffc95873dfc6547585cb0";//小程序私钥

    public static Map info(String code, String appId, String appSecret) {
        //授权（必填）
        String grant_type = "authorization_code";
        //URL
        String requestUrl = "https://api.weixin.qq.com/sns/jscode2session?";
        String params = "appid=" + AppId + "&secret=" + AppSecret + "&js_code=" + code + "&grant_type=" + grant_type;
        //发送请求
        JSONObject data = NetUtil.get(requestUrl + params);
        //解析相应内容（转换成json对象）
        JSONObject json = JSONObject.fromObject(data);
        Map<String, Object> map = new HashMap<String, Object>();
        if (data != null) {
            String Openid = String.valueOf(data.get("openid"));
            String session_key = String.valueOf(data.get("session_key"));
            map.put("openid", Openid);
            map.put("session_key", session_key);
        }
        return map;
    }

    /**
     * 推送
     *
     * @param openId        发给谁
     * @param formId        表单id
     * @param templateId    模板id
     * @param keyword1Value 值1
     * @param keyword2Value 值2
     * @return
     */
    public static boolean isPush(String openId, String formId,
                                 String templateId, String keyword1Value, String keyword2Value, String keyword3Value,
                                 String keyword4Value,String url) {

        //1,配置小程序信息
        WxMaInMemoryConfig wxConfig = new WxMaInMemoryConfig();
        wxConfig.setAppid(Const.MINAPPID);//小程序appid
        wxConfig.setSecret(Const.MINSECRET);//小程序AppSecret

        WxMaService wxMaService = new WxMaServiceImpl();
        wxMaService.setWxMaConfig(wxConfig);

        //2,设置模版信息（keyword1：类型，keyword2：内容）
        List<WxMaTemplateData> templateDataList = new ArrayList<>(2);
        WxMaTemplateData data1 = new WxMaTemplateData("keyword1", keyword1Value);
        WxMaTemplateData data2 = new WxMaTemplateData("keyword2", keyword2Value);
        WxMaTemplateData data3 = new WxMaTemplateData("keyword3", keyword3Value);
        WxMaTemplateData data4 = new WxMaTemplateData("keyword4", keyword4Value);
        templateDataList.add(data1);
        templateDataList.add(data2);
        templateDataList.add(data3);
        templateDataList.add(data4);

        //3，设置推送消息
        WxMaTemplateMessage templateMessage = WxMaTemplateMessage.builder()
                .toUser(openId)//要推送的用户openid
                .formId(formId)//收集到的formid
                .templateId(templateId)//推送的模版id（在小程序后台设置）
                .data(templateDataList)//模版信息
                .page(url)//要跳转到小程序那个页面
                .build();
        //4，发起推送
        try {
            wxMaService.getMsgService().sendTemplateMsg(templateMessage);
        } catch (WxErrorException e) {
            System.out.println("推送失败：" + e.getMessage());
            return false;
        }

        return true;
    }


}
